(for Internet Explorer)
Sub  Dic_sub( out_Dic as Dictionary, WholeDic as Dictionary, BaseDic as Dictionary,
              CompareFunc as function, CompareFuncParam as variant )
辞書を減算します。
【引数】
out_Dic
WholeDic
(出力) WholeDic から BaseDic を減算した結果の辞書
BaseDic に out_Dic を加算した結果と同一の内容が入った辞書
(src)
WholeDic - BaseDic = out_Dic の演算をします。
BaseDic に out_Dic を加算(Dic_add)した結果が、WholeDic になるような out_Dic を取得します。
out_Dic に、値が Empty の変数を指定すると、Dic_sub の内部で生成した辞書が取得できます。

同じキーのアイテムを CompareFunc した結果、等価でなければ、out_Dic にコピーされます。
辞書のアイテムがオブジェクトのときは、WholeDic のアイテムと同一のオブジェクトを指します。

BaseDic にあって WholeDic にないキーは、out_Dic にもできますが、アイテムは Empty と
なります。

out_Dic に Empty が入った変数を指定したら、内部で新しく辞書を生成します。
out_Dic に 辞書が入った変数を指定したときは、その辞書を空にしてから、その辞書に出力します。
BaseDic
Dic_add で加算する前と同一の内容が入った辞書
  Dic_sub  dic, _
    Dict(Array( "Key1","Item1", "Key2","ITEMS", "Key3","Item3" )), _
    Dict(Array( "Key1","Item1", "Key2","Item2", "Key4","Item4" )), _
    Empty, Empty
    '//[out] dic

  '// dic = Dict(Array( "Key2","ITEMS", "Key3","Item3", "Key4",Empty ))
サンプル:
CompareFunc
CompareFuncParam
通常 Empty、CompareFunc の第3引数
、Empty =
通常 Empty、
→ T_Dic.vbs # T_DicAdd
テスト
サンプル:
  Dic_sub  dic, whole_dic, base_dic, Empty, Empty '//[out] dic
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
関連
Sub  Dic_addInArrayItem( ref_Dictionary as dictionary of ArrayClass, _
        in_Key as string,  in_Item as variant )
配列をアイテムに持つ辞書に、配列の要素を追加します。
【引数】
ref_Dictionary
in_Key
配列をアイテムに持つ辞書
辞書のキー
in_Item
配列に追加するアイテム (オブジェクト または 非オブジェクト)
Key, Item
*
in_Item
*
データ構造
登録されていない辞書のキーを指定したときは、内部で ArrayClass のオブジェクトを新規作成して、
辞書のアイテムにします。
すでに登録されている辞書のキーを指定したときは、そのキーのアイテムである配列の末尾に
追加します。
内部の動作
Dic_addInArrayItem  dic, "key", item
サンプル
要素でループする
    For Each  key  In  files.Keys
        For Each  item  In  files( key ).Items
            :
        Next
    Next
同じ要素を重複して追加する可能性があるので注意してください。
Sub  Dic_addExInArrayItem( ref_Dictionary as dictionary of ArrayClass, _
    in_Key as string,  in_Item as variant, _
    in_CompareFunction as CompareFunction,  in_ParameterOfCompareFunction as variant, _
    in_Option as integer )
配列をアイテムに持つ辞書に、重複しないように、配列の要素を追加します。
【引数】
ref_Dictionary
in_Key
配列をアイテムに持つ辞書
辞書のキー
in_Item
配列に追加するアイテム、in_CompareFunction の第2引数
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
in_CompareFunction
in_ParameterOfCompareFunction
in_CompareFunction の第3引数
in_Option
c.ReplaceIfExist または c.IgnoreIfExist またはc.AddAlways
in_Option 引数の c は、g_VBS_Lib です。
c.ReplaceIfExist
c.IgnoreIfExist
比較関数が 0 を返す要素がすでにあるときは、置き換えます。
比較関数が 0 を返す要素がすでにあるときは、追加しません。
c.AddAlways
比較関数の結果に関わらず、追加します。
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
Dic_removeInArrayItem  dic, "KeyA", "ItemA", GetRef( "StdCompare" ), Empty, True, False
Sub  Dic_removeInArrayItem( arg_Dictionary as dictionary of ArrayClass, _
        in_Key as string,  in_Item as variant, _
        in_CompareFunction as CompareFunction,  in_ParameterOfCompareFunction as variant, _
        in_IsErrorIfNotFound as boolean,  in_IsMultiRemove as boolean )
配列をアイテムに持つ辞書から、配列の要素を除外します。
【引数】
arg_Dictionary
in_Key
配列をアイテムに持つ辞書
辞書のキー
in_Item
比較対象のアイテム、in_CompareFunction の第2引数
関連
サンプル
in_CompareFunction
in_ParameterOfCompareFunction
in_IsErrorIfNotFound
in_IsMultiRemove
in_CompareFunction の第3引数
1つも一致しなかったらエラーにするかどうか
複数の要素が一致したら、そのすべて除外するかどうか
in_IsErrorIfNotFound に True を指定すると、登録されていない辞書のキーを指定したときや、
比較対象のアイテムと一致する配列要素が1つのなかったときに、E_NotFoundSymbol エラー
になります。
参考
のデータ構造
辞書の中にある、指定されたキーに対応するアイテムを探し、
そのアイテムである配列の中のすべての要素に対して比較関数をコールバックし、
比較関数が 0を返したら、比較関数に渡した要素を配列から除外します。
配列の要素がすべて除外されたら、該当する辞書のキーやアイテムも除外します。
Function  Dic_searchInArrayItem( ref_Dictionary as dictionary of ArrayClass, _
    in_Key as string,  in_Item as variant, _
    in_CompareFunction as CompareFunction,  in_ParameterOfCompareFunction as variant )
    as array of integer
配列をアイテムに持つ辞書から、条件に合う配列番号を列挙します。
【引数】
ref_Dictionary
in_Key
配列をアイテムに持つ辞書
辞書のキー
in_Item
比較対象のアイテム、in_CompareFunction の第2引数
in_CompareFunction
in_ParameterOfCompareFunction
返り値
in_CompareFunction の第3引数
配列番号の配列
indexes = Dic_searchInArrayItem( dic, "KeyA", "ItemA", GetRef( "StdCompare" ), Empty )
サンプル
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
Function  Dic_getCountInArrayItem( ref_Dictionary as dictionary of ArrayClass ) as integer
配列をアイテムに持つ辞書に入っているすべての要素の数を返します。
【引数】
ref_Dictionary
返り値
配列をアイテムに持つ辞書
要素の数
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
Function  GetDicItemAsArrayClass( Dic as dictionary, Key as string ) as ArrayClass
辞書のアイテムにある ArrayClass で参照します。 アイテムがなければ ArrayClass を作成します。
【引数】
Desc
Key
辞書
辞書のキー
返り値
辞書の要素である ArrayClass のオブジェクト
  Dim  dic, arr

  Set dic = CreateObject( "Scripting.Dictionary" )
  Set arr = GetDicItemAsArrayClass( dic, "key1" )
テスト
→ T_Dic.vbs # T_GetDicItem
サンプル
dic, "key1"
ソース
→ vbslib.vbs
指定したキーに対応するアイテムがないときは、新規作成した ArrayClass のオブジェクトを、
キーに対応するアイテムに追加します。
Function  Dic_searchParent( Dictionay as dictionary, BasePath as string, Path as string ) as string
パスがキーに入っている辞書の中から、指定したパスの親フォルダーのパスを検索します。
【引数】
Dictionay
BasePath
検索対象の辞書
Dictionay 引数のキーがフル パスのときの基準(フル パス)、Empty 可
Path
検索キーとなるファイル、または、フォルダーのパス、または、Empty
サンプル
返り値
親フォルダーのパス、または、Empty = 見つからない
T_PathDictionary_SearchParent
→ vbslib.vbs
ソース
→ T_Wildcard.vbs
テスト
    Set  dic = CreateObject( "Scripting.Dictionary" )
    dic( "123" ) = 0
    dic( "123\456" ) = 0
    Assert  Dic_searchParent( dic, "C:\Folder", "123\456\a.txt" )  = "123\456"
    Assert  Dic_searchParent( dic, "C:\Folder", "123\4567\a.txt" ) = "123"
    Assert  IsEmpty( Dic_searchParent( dic, "C:\Folder", "123" ) )
サンプル
Function  GetOrAddIfNot( Path )
    If dic.Exists( Path ) Then
        Set GetOrAddIfNot = dic( Path )
    Else
        Set parent_item = Dic_searchParent( dic, "C:\Folder", Path )
        If IsEmpty( parent_item ) Then  Error
        Set sub_item = NewSubFromParent( parent_item, Path )
        Set dic( Path ) = sub_item
        Set GetOrAddIfNot = sub_item
    End Sub
サブ フォルダーの Item を、親フォルダーの Item を参考に作成します
関連
の SearchParent
BasePath 引数は、Dictionay 引数のキーがフル パスのとき、かつ、Path が相対パスのときに必要です。
それ以外のときは、Empty を指定できます。
に近い処理をします。
Sub  Dic_searchChildren( Dictionay as dictionary, BasePath as string,
    Path as string,  out_PathArray as array of string,  Option_ as Empty )
パスがキーに入っている辞書の中から、指定したパスの子ノードのパスを検索します。
【引数】
Dictionay
BasePath
検索対象の辞書
Dictionay 引数のキーがフル パスのときの基準(フル パス)、Empty 可
Path
検索キーとなるファイル・フォルダーのパス、または、Empty
out_PathArray
(出力) 子のフォルダーまたはファイルのパスの配列
Option_
Empty を指定してください
サンプル
    Set  dic = CreateObject( "Scripting.Dictionary" )
    dic( "123\456" ) = 0
    dic( "123\456\File.txt" ) = 0
    Dic_searchChildren  dic, "C:\Folder", "123", an_array, Empty  '//(out)an_array
        Assert  IsSameArray( an_array, Array( "123\456", "123\456\File.txt" ) )
    Dic_searchChildren  dic, "C:\Folder", "123\456", an_array, Empty  '//(out)an_array
        Assert  IsSameArray( an_array, Array( "123\456\File.txt" ) )
    Dic_searchChildren  dic, "C:\Folder", "12", an_array, Empty  '//(out)an_array
        Assert  IsSameArray( an_array, Array( ) )
BasePath 引数は、Dictionay 引数のキーがフル パスのとき、かつ、Path が相対パスのときに必要です。
それ以外のときは、Empty を指定できます。
T_PathDictionary_SearchChildren
→ vbslib.vbs
ソース
→ T_Wildcard.vbs
テスト
out_PathArray 引数の配列要素がフル パスか相対パスかは、Dictionay 引数のキーがフル パスか
相対パスかによります。
フォルダーとサブ フォルダーに入っているファイルを一覧することに近い処理をします。
ソース
→ vbslib.vbs
Sub  QuickSortDicByKey( in_out_Dictionary as dictionary )
【引数】
in_out_Dictionary
ソートする辞書
辞書に入っているデータをクイック ソートします。 辞書のキーでソートします。
辞書の Item はオブジェクト(Set で代入するもの)を指定してください。
辞書の Keys の順番が変わります。
を使ってソート(並べ替え)します。
関連
Sub  QuickSortDicByKeyForNotObject( in_out_Dictionary as dictionary )
【引数】
in_out_Dictionary
ソートする辞書
辞書に入っているデータをクイック ソートします。 辞書のキーでソートします。
辞書の Keys の順番が変わります。
辞書の Item はオブジェクト以外(Set で代入しないもの)を指定してください。
ソース
→ vbslib.vbs
を使ってソートします。
テスト
Sub  DicItemToNameOnlyClassItem( ref_Dictionary )
オブジェクトではない辞書のアイテムを、NameOnlyClass のオブジェクトに変換します。
【引数】
ref_Dictionary
アイテムを変換する辞書
ソートできる辞書にします。
NameOnlyClass の Delegate メンバーは Empty になります。
Set  dic = CreateObject( "Scripting.Dictionary" )
DicItemToNameOnlyClassItem  dic
サンプル
ソース
→ vbslib.vbs
関連
配列版
テスト
Sub  NameOnlyClassItemToDicItem( ref_Dictionary )
NameOnlyClass のオブジェクトが入っている辞書を、Name プロパティの値の辞書に変換します。
【引数】
ref_Dictionary
アイテムを変換する辞書
ソートできる配列から戻します。
Set  dic = CreateObject( "Scripting.Dictionary" )
NameOnlyClassItemToDicItem  dic
サンプル
ソース
→ vbslib.vbs
関連
配列版
テスト
Sub  QuickSort_fromDic( Dic as dictionary, out_Arr as array of object,
                        CompareFunc as function, Param as variant )
【引数】
Dic
ソートするデータが入った辞書。(辞書はソートされません)
辞書に入っているデータ(Dictionary::Item)をクイックソートします。 比較関数を指定します。
(出力) ソートした結果の配列。配列の要素はオブジェクト
out_Arr
CompareFunc
Param
compare_func の第3引数
(src)
サンプル
  QuickSort_fromDic  dic, arr, GetRef("StdCompare"), Empty  '//[out]arr
関連
ソース
→ vbslib.vbs
    Set dic = CreateObject( "Scripting.Dictionary" )

    QuickSort_fromDicKey  dic, sorted_items, Empty  '//[out] sorted_items

    For Each  item  In sorted_items
        echo  item.Key +" : "+ item.Item
    Next
Sub  QuickSort_fromDicKey( in_out_Dictionary as dictionary,
    out_SortedKeysArray as array of string,  in_Empty as Empty )
辞書に入っているデータをクイック ソートします。 辞書のキーでソートします。
【引数】
in_out_Dictionary
out_SortedKeysArray
ソートする前のキーが入った辞書
(出力) ソートした後のキーが入った配列。配列の要素は
in_Empty
Empty を指定してください
サンプル
ソートした結果は、out_SortedKeysArray 引数に出力されます。
関連
を使ってソートします。
Sub  ShakerSortDicByKey( Dic as Dictionary )
【引数】
Dic
ソートする辞書
辞書に入っているデータをシェーカーソートします。 辞書のキーでソートします。
テスト
→ T_ShakerSort.vbs
T_ShakerSortDicByKey
ソース
→ vbslib.vbs
辞書の Item はオブジェクト(Set で代入するもの)を指定してください。
を使ってソート(並べ替え)します。
Sub  ShakerSortDicByKeyCompare( Dic as Dictionary,
   CompareFunc as function, CompareFuncParam as variant )
【引数】
Dic
ソートする辞書
辞書に入っているデータをシェーカーソートします。 辞書のキーでソートします。
テスト
→ T_ShakerSort.vbs
T_ShakerSortDicByKeyCompare
ソース
→ vbslib.vbs
辞書の Item はオブジェクト(Set で代入するもの)を指定してください。
CompareFunc
CompareFuncParam
CompareFunc の第3引数
ShakerSortDicByKeyCompare  dic, GetRef( "NumStringCompare" ), Empty
サンプル
Sub  ShakerSort_fromDic( dic as Dictionary, out_arr as object array,
        sign as integer, compare_func as function, param as variant )
【引数】
dic
ソートするデータが入った辞書。(辞書はソートされません)
辞書に入っているデータ(Dictionary::Item)をシェーカーソートします。
ソートした結果の配列。配列の要素はオブジェクト。
out_arr
compare_func
param
compare_func の第3引数
参考
sign
正の数=dic の順がベース、負の数=dicの逆順がベース(*1)
(*1) sign 引数の説明
dic.Item の For ループの順番どおりの配列を作成してからシェーカーソートを開始
するか、逆順の配列を作成してからシェーカーソートを開始するかを指定します。
sign < 0 のときでも、compare_func は、sign > 0 のときの compare_func の返り値の
マイナスを返すようにしてください。
(src)
Sub  ShakerSort_fromDicKey( Dic as Dictionary, out_Array as array of DicElem, Option_ as Empty )
【引数】
Dic
ソートするデータが入った辞書。(辞書はソートされません)
辞書に入っているデータをシェーカーソートします。 辞書のキーでソートします。
ソートした結果の配列。配列の要素は
out_Array
(src)
Option_
Empty を指定してください
サンプル
  Set dic = CreateObject( "Scripting.Dictionary" )

  ShakerSort_fromDicKey  dic, sorted_items, Empty  '//[out] sorted_items

  For Each  item  In sorted_items
    echo  item.Key +" : "+ item.Item
  Next
dic, sorted_items
を使ってソートします。
Sub  ReverseDictionary( ref_Dictionary as Dictionary )
【引数】
ref_Dictionary
並びを逆にする辞書
辞書に入っているデータの並びを逆にします。
テスト
→ T_ShakerSort.vbs
T_ReverseDictionary
ソース
→ vbslib.vbs
関連
GraphVertexClass の配列 = グラフ
GraphVertexClass
Item
Item
Item
Item
GraphVertexClass
GraphVertexClass
GraphVertexClass
GraphVertexClass の配列は、内部構造が隣接リストである、グラフ理論のグラフです。
ツリー構造に使うこともできます。 (ツリー構造はグラフの特殊形です)

グラフは、任意の数の頂点(ノード、Vertex)と、任意の数の辺(Edge)から構成されます。
1つの GraphVertexClass は、頂点に相当し、AdjacentIndexes メンバー変数は、辺に相当します。
辺は、GraphVertexClass の配列の番号で表し、無向グラフでは必ず双方向に設定されます。 
.Item
.AdjacentIndexes
ユーザーだけが設定&参照する、頂点のオブジェクト
関数の内部で設定され、参照可能な、隣接頂点のグラフ全体の配列番号の配列
.ParentIndex
ユーザーも設定&参照できる、親頂点(探索元)の配列番号
テスト
→ T_Tree.vbs
T_BreadthFirstSearch
ソース
→ vbslib.vbs
.Edges
関数の内部で設定され、参照も可能な、辺のオブジェクトの配列
.Index
頂点生成時に自動的に設定される、頂点番号。 グラフ全体の配列番号と同じ値
T_GraphVertexClass
関数
グラフの頂点を生成して、グラフに追加します。
グラフの辺にあたる変数に値を設定します。(有向グラフ)
グラフの辺にあたる変数に値を設定します。(無向グラフ)
グラフの辺にあたる変数の値を返します。(有向グラフ)
グラフの辺にあたる変数の値を返します。(無向グラフ)
辺の変数の中にある頂点に対応する配列番号を返します。
幅優先探索を行います。
前回探索した結果を格納する内部変数をリセットします。
1
0
2
3
4
上の図の番号は、グラフ全体の頂点配列(GraphVertexClass の配列)の配列番号です。
配列番号 2 の GraphVertexClass の AdjacentIndexes メンバー変数は、( 0, 1, 4 ) です。
配列番号 4 の GraphVertexClass の AdjacentIndexes メンバー変数は、( 2, 3 ) です。
メンバー変数
GraphVertexClass
Item
サンプル
Edge
Edge
Edge
Edge
… ライブラリが定義するクラス
… ユーザーが定義&生成するクラス
→ グラフ (グラフ理論)
参考